{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import bayesnet as bn\n",
    "\n",
    "np.random.seed(1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110776b38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_train = np.array([\n",
    "    np.random.normal(loc=-7.5, scale=1, size=100),\n",
    "    np.random.normal(loc=-2.5, scale=1, size=100),\n",
    "    np.random.normal(loc=5, scale=2, size=100)\n",
    "]).flatten()\n",
    "\n",
    "plt.scatter(x_train, np.random.normal(scale=0.005, size=x_train.size), s=5)\n",
    "plt.hist(x_train, bins=20, normed=True, alpha=0.2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class GaussianMixture(bn.Network):\n",
    "    \n",
    "    def __init__(self, n_component):\n",
    "        super().__init__(\n",
    "            c=np.ones(n_component),\n",
    "            mu=np.array([-10., 0., 10.]),\n",
    "            s=np.ones(n_component)\n",
    "        )\n",
    "\n",
    "    def __call__(self, x):\n",
    "        self.px = bn.random.GaussianMixture(bn.softmax(self.c), self.mu, bn.softplus(self.s), data=x)\n",
    "        return self.px.pdf().value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "model = GaussianMixture(3)\n",
    "optimizer = bn.optimizer.Adam(model, 1e-3)\n",
    "\n",
    "for _ in range(10000):\n",
    "    model.clear()\n",
    "    model(x_train[:, None])\n",
    "    log_likelihood = model.log_pdf()\n",
    "    log_likelihood.backward()\n",
    "    optimizer.update()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nYBARkZD/A/inJRllTPJoAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110894550>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x_train, np.random.normal(scale=0.005, size=x_train.size), s=5)\n",
    "plt.hist(x_train, bins=20, normed=True, alpha=0.2)\n",
    "\n",
    "x = np.linspace(-10, 10, 1000)\n",
    "p = model(x[:, None])\n",
    "plt.plot(x, p)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class GaussianMixtureEM(bn.Network):\n",
    "    \n",
    "    def __init__(self, n_component):\n",
    "        super().__init__(\n",
    "            c=np.ones(n_component),\n",
    "            mu=np.array([-10., 0., 10.]),\n",
    "            s=np.ones(n_component)\n",
    "        )\n",
    "        \n",
    "    def __call__(self, x, z=None):\n",
    "        if z is None:\n",
    "            return bn.random.GaussianMixture(bn.softmax(self.c), self.mu, bn.softplus(self.s), data=x).pdf().value\n",
    "        self.pz = bn.random.Categorical(logit=bn.softmax(self.c), data=z)\n",
    "        self.px = bn.random.GaussianMixture(z, self.mu, bn.softplus(self.s), data=x)\n",
    "        return self.px.pdf().value * self.pz.pdf().value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "model = GaussianMixtureEM(3)\n",
    "optimizer = bn.optimizer.Adam(model, 1e-3)\n",
    "\n",
    "for _ in range(10):\n",
    "    resp = np.stack([model(x_train[:, None], np.eye(3)[i]) for i in range(3)], axis=-1)\n",
    "    resp /= resp.sum(axis=-1, keepdims=True)\n",
    "    for _ in range(1000):\n",
    "        model.clear()\n",
    "        model(x_train[:, None], resp)\n",
    "        log_likelihood = model.log_pdf()\n",
    "        log_likelihood.backward()\n",
    "        optimizer.update()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110a62cc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "resp = np.stack([model(x_train[:, None], np.eye(3)[i]) for i in range(3)], axis=-1)\n",
    "resp /= resp.sum(axis=-1, keepdims=True)\n",
    "plt.scatter(x_train, np.random.normal(scale=0.005, size=x_train.size), s=5, c=resp)\n",
    "plt.hist(x_train, bins=20, normed=True, alpha=0.2)\n",
    "\n",
    "x = np.linspace(-10, 10, 1000)\n",
    "p = model(x[:, None])\n",
    "plt.plot(x, p)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "class VariationalGaussianMixture(bn.Network):\n",
    "    \n",
    "    def __init__(self, n_component):\n",
    "        self.n_component = n_component\n",
    "        super().__init__(\n",
    "            c=np.ones(n_component),\n",
    "            m=np.linspace(-10, 10, n_component),\n",
    "            s=np.ones(n_component),\n",
    "            shape=np.ones(n_component),\n",
    "            rate=np.ones(n_component)\n",
    "        )\n",
    "        \n",
    "    def gaussian(self, x, z):\n",
    "        self.qtau = bn.random.Gamma(self.shape, self.rate, p=bn.random.Gamma(1., 1.))\n",
    "        tau = self.qtau.draw()\n",
    "        pmu = bn.random.Gaussian(0., tau=tau)\n",
    "        self.qmu = bn.random.Gaussian(self.m, bn.softplus(self.s), p=pmu)\n",
    "        self.px = bn.random.GaussianMixture(z, self.qmu.draw(), 1 / bn.sqrt(tau), data=x)\n",
    "\n",
    "    def category(self, z):\n",
    "        coef = bn.softmax(self.c)\n",
    "        self.pc = bn.random.Dirichlet(np.ones(coef.shape) * 1., data=coef)\n",
    "        self.pz = bn.random.Categorical(coef, data=z)\n",
    "        \n",
    "    def __call__(self, x, z=None):\n",
    "        if z is None:\n",
    "            self.gaussian(x, bn.softmax(self.c))\n",
    "            return self.px.pdf().value\n",
    "        self.category(z)\n",
    "        self.gaussian(x, z)\n",
    "        return self.pz.pdf().value * self.px.pdf().value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "model = VariationalGaussianMixture(3)\n",
    "optimizer_c = bn.optimizer.Adam([model.c], 1e-3)\n",
    "optimizer_g = bn.optimizer.Adam([model.m, model.s, model.shape, model.rate], 1e-3)\n",
    "\n",
    "for _ in range(10):\n",
    "    resp = 0\n",
    "    for _ in range(10):\n",
    "        resp_ = np.stack(\n",
    "            [model(x_train[:, None], np.eye(model.n_component)[i]) for i in range(model.n_component)],\n",
    "            axis=-1\n",
    "        )\n",
    "        resp_ /= resp_.sum(axis=-1, keepdims=True)\n",
    "        resp += resp_ / 10\n",
    "    for _ in range(100):\n",
    "        model.clear()\n",
    "        model.category(resp)\n",
    "        log_posterior = model.log_pdf()\n",
    "        log_posterior.backward()\n",
    "        optimizer_c.update()\n",
    "    for _ in range(1000):\n",
    "        model.clear()\n",
    "        model.gaussian(x_train[:, None], resp)\n",
    "        elbo = model.elbo()\n",
    "        elbo.backward()\n",
    "        optimizer_g.update()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110c9e8d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "resp = 0\n",
    "for _ in range(10):\n",
    "    resp_ = np.stack(\n",
    "        [model(x_train[:, None], np.eye(model.n_component)[i]) for i in range(model.n_component)],\n",
    "        axis=-1\n",
    "    )\n",
    "    resp_ /= resp_.sum(axis=-1, keepdims=True)\n",
    "    resp = resp + resp_ / 10\n",
    "plt.scatter(x_train, np.random.normal(scale=0.005, size=x_train.size), s=5, c=resp)\n",
    "plt.hist(x_train, bins=20, normed=True, alpha=0.2)\n",
    "\n",
    "x = np.linspace(-10, 10, 1000)\n",
    "p = np.mean([model(x[:, None]) for _ in range(1000)], axis=0)\n",
    "plt.plot(x, p)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
